var nodemailer = require('nodemailer');
const { bill } = require('../models/bill')
const schedule = require('node-schedule');
const dayjs = require('dayjs');
var transport = nodemailer.createTransport({
    host: 'smtp.qq.com', //QQ邮箱的 smtp 服务器地址
    secure: true, //使用 SSL 协议
    secureConnection: false, //是否使用对 https 协议的安全连接
    port: 465, //QQ邮件服务所占用的端口
    auth: {
        user: '1078118049@qq.com', //开启 smtp 服务的发件人邮箱，用于发送邮件给其他人
        pass: 'esvvxjikplkkjajf' //SMTP 服务授权码
    }
})
const list = ['1802072510@qq.com'];
const startScheduler = async () => {
    // const rule = new schedule.RecurrenceRule();
    // rule.hour = 0; // 每天的 10 点执行
    // rule.minute = 0; // 0 分执行
    // rule.second = 1; // 0 秒执行
    schedule.scheduleJob('0 0 * * *', async () => {
        //根据当前时间预警overDate
        console.log('开始查询即将过期的账单...');

        try {
            // 获取当前时间 + 3天的时间戳（毫秒）
            const threeDaysLater = dayjs().subtract(4, 'day').valueOf();
            const oneDaysLater = dayjs().subtract(1, 'day').valueOf();

            // 查询 overDate 在当前时间到三天后之间的记录
            const overdueBills = await bill.find({
                isStart: true,
                overDate: { $gte: threeDaysLater, $lte: oneDaysLater }
            }).exec();

            if (overdueBills.length > 0) {
                // 在这里处理即将过期的账单，例如发送通知等

                var mailOption = {
                    from: '1078118049@qq.com', //发件人
                    to: list, //收件人
                    subject: `【康斐尔客户管理系统通知:】您有${overdueBills.length}笔账单即将到期(三天)，请及时处理。`, //标题
                    html: `您有${overdueBills.length}笔账单即将到期(三天内)，请及时处理。` //正文，可使用 HTML 格式进行渲染
                }

                console.log('今天以外即将过期的账单:', overdueBills);
                await transport.sendMail(mailOption, (err, res) => {
                    if (err) {//执行错误
                        console.log(err)
                    }
                    transport.close(); // 如果没用，则关闭连接池
                })

                // 在这里处理即将过期的账单，例如发送通知等
            } else {
                console.log('没有即将过期的账单');
            }
        } catch (err) {
            console.error('查询账单失败:', err);
        }
        console.log('预警定时任务执行')
        //根据当前时间提醒到期


        console.log('开始查询今天到期的账单...');

        try {
            // 获取今天的开始时间（00:00:00）
            const startOfDay = dayjs().startOf('day').valueOf();

            // 获取今天的结束时间（23:59:59）
            const endOfDay = dayjs().endOf('day').valueOf();

            // 查询 today 的数据
            const todayDueBills = await bill.find({
                isStart: true,
                overDate: { $gte: startOfDay, $lte: endOfDay }
            }).exec();

            if (todayDueBills.length > 0) {

                // 在这里处理今天到期的账单，例如发送通知等
                var mailOption = {
                    from: '1078118049@qq.com', //发件人
                    to: list, //收件人
                    subject: `【康斐尔客户管理系统通知:】您有${todayDueBills.length}笔账单今天到期，请及时处理。`, //标题
                    html: `您有${todayDueBills.length}笔账单今天到期，请及时处理。` //正文，可使用 HTML 格式进行渲染
                }
                await transport.sendMail(mailOption, (err, res) => {
                    if (err) {//执行错误
                        console.log(err)
                    }
                    transport.close(); // 如果没用，则关闭连接池
                })
                console.log('今天到期的账单:', todayDueBills);
            } else {
                console.log('没有今天到期的账单');
            }
        } catch (err) {
            console.error('查询今天到期的账单失败:', err);
        }

    })
    console.log('账单定时任务执行')
}


module.exports = {
    startScheduler
}
